// builtinBooks.js - 从云开发环境下载词书数据
const { WORD_BOOKS_PATH_PREFIX } = require('../utils/cloudConfig');
// 导入存储管理器
const storageManager = require('../manager/storageManager').getInstance();

// 云存储中词书索引文件的File ID
const WORD_BOOKS_INDEX_FILE_ID = `${WORD_BOOKS_PATH_PREFIX}index.json`;

// 本地存储的键名
const BUILTIN_BOOKS_CACHE_KEY = 'builtin_books_cache';
// 词书索引文件下载时间的缓存键名
const BOOKS_DOWNLOAD_TIMESTAMP_KEY = 'books_download_timestamp';

// 缓存获取到的词书数据（内存缓存）
let cachedBooks = null;

/**
 * 从云存储下载并获取词书数据
 * @returns {Promise<Array>} 词书数据数组
 */
const getBuiltinBooks = async () => {
  const app = getApp();
  // 首先检查内存缓存
  if (cachedBooks) {
    console.log('从内存缓存获取词书数据');
    return cachedBooks;
  }

  try {
    // 尝试从本地存储获取缓存
    const cachedData = storageManager.getStorage(BUILTIN_BOOKS_CACHE_KEY);
    if (cachedData) {
      console.log('从本地存储获取词书缓存数据');
      cachedBooks = Array.isArray(cachedData) ? cachedData : [];
      return cachedBooks;
    }

    console.log('缓存不存在，开始从云存储获取词书数据');
    // 获取cloudManager实例
    const cloudManager = app.globalData.cloudManager || app.getCloudManager();
    
    if (!cloudManager) {
      console.error('cloudManager未初始化');
      throw new Error('cloudManager未初始化');
    }

    // 从云存储下载词书索引文件
    console.log('开始从云存储下载词书索引文件');
    const result = await cloudManager.downloadFile(WORD_BOOKS_INDEX_FILE_ID);
    
    // 记录下载时间
    const downloadTimestamp = Date.now();
    storageManager.setStorage(BOOKS_DOWNLOAD_TIMESTAMP_KEY, downloadTimestamp);
    console.log('词书索引文件下载时间已记录');
    
    // 读取文件内容
    const fileContent = await new Promise((resolve, reject) => {
      wx.getFileSystemManager().readFile({
        filePath: result.tempFilePath,
        encoding: 'utf-8',
        success: res => resolve(res.data),
        fail: err => reject(err)
      });
    });

    // 解析JSON数据
    const booksData = JSON.parse(fileContent);
    
    // 缓存数据到内存
    cachedBooks = Array.isArray(booksData) ? booksData : [];
    
    // 保存到本地存储
    try {
      storageManager.setStorage(BUILTIN_BOOKS_CACHE_KEY, cachedBooks);
      console.log('词书数据已保存到本地存储');
    } catch (storageError) {
      console.warn('保存词书数据到本地存储失败:', storageError);
    }
    
    console.log('词书数据加载成功，共', cachedBooks.length, '本词书');
    return cachedBooks;
  } catch (error) {
    console.error('加载词书数据失败:', error);
    // 返回空数组作为降级处理
    return [];
  }
};

/**
 * 清除缓存，强制重新从云端获取数据
 */
const clearCache = () => {
  // 清除内存缓存
  cachedBooks = null;
  
  // 清除本地存储缓存
    try {
      storageManager.removeStorage(BUILTIN_BOOKS_CACHE_KEY);
      storageManager.removeStorage(BOOKS_DOWNLOAD_TIMESTAMP_KEY);
      console.log('词书数据本地缓存已清除');
    } catch (error) {
      console.warn('清除词书数据本地缓存失败:', error);
    }
};

module.exports = {
  getBuiltinBooks,
  clearCache,
  BOOKS_DOWNLOAD_TIMESTAMP_KEY,
  BUILTIN_BOOKS_CACHE_KEY
};
